home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / tool / peer011b / peer011b.bas < prev    next >
BASIC Source File  |  1995-02-20  |  23KB  |  466 lines

  1. 10 '####################################################################
  2. 20 '#####                                                          #####
  3. 30 '#####  「BASICで、ダンプしましょ」       Ver 0.11b           #####
  4. 40 '#####                                                          #####
  5. 50 '#####                  [PEER.BAS] + [BB011b.REX]              #####
  6. 60 '#####                                                          #####
  7. 70 '#####                       企画・制作者 「たまふり・ふるふる」   #####
  8. 80 '#####                                                          #####
  9. 90 '####################################################################
  10. 100 '●画面、変数設定 & 機械語る-ちん読み込み
  11. 110   SCREEN@ 0:CLS:WIDTH 80,25:CONSOLE 3,16,1:COLOR 7,0,7,4:DEFINT A-Z
  12. 120   CLEAR ,,,,1024:LOADM"BB011b.REX",0
  13. 130   DIM SMY&(16):SRC&=&H14:DAT$=SPACE$(16):DAT&=PEEK(VARPTR(DAT$),4)
  14. 140  '  ********* X ********  ****** ダミ-Y *******  ****** 文字数 ******
  15. 150 GC$=CHR$(&HE8)+CHR$(&H01)+CHR$(&H00)+CHR$(&H00)+CHR$(&H10)+CHR$(&H00)
  16. 160  '  グラフィックBIOS設定(CRTCの操作なし)
  17. 170      BIOSNO&=&H20
  18. 180      R_EAX&=&H0100:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H43
  19. 190      R_ESI&=&H0:R_EDI&=&H0
  20. 200      R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
  21. 210  '
  22. 220      CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
  23. 230  '
  24. 240      BIOSNO&=&H20
  25. 250      R_EAX&=&H0540:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H00
  26. 260      R_ESI&=&H0:R_EDI&=&H0
  27. 270      R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
  28. 280  '
  29. 290      CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
  30. 300 '●PFキ-の初期化 & 定義
  31. 310   FOR LOP0=2 TO 10 : KEY LOP0,"" : NEXT
  32. 320   KEY 1,"画面止":ON KEY (1) GOSUB 2480:KEY (1) ON
  33. 330 '●タイトル表示
  34. 340   DUM$="「BASICでダンプしましょ」 Ver 0.11a 1994/08/20 - /??/??"
  35. 350   LOCATE 0,0:PRINT CHR$(&H1B)+"[7;32m"+SPACE$(11)+DUM$+SPACE$(11)+CHR$(&H1B)+"[0;1m"
  36. 360 '●文字列定義
  37. 370   MEM$="ofADRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F SUM 0123456789ABCDEFofADRESS +3 +2 +1 +0 +7 +6 +5 +4 +B +A +9 +8 +F +E +D +C"
  38. 380   ADM$="01.****.********.*** : 02.****.********.*** : 03.****.********.***   04.****.********.*** : 05.****.********.*** : 06.****.********.***"
  39. 390 '●コントロ-ルコ-ド表示
  40. 400   GOSUB 2720
  41. 410 '●アドレス入力
  42. 420   GOSUB 1370
  43. 430   LOCATE 31,1:PRINT SPACE$(29)
  44. 440   LOCATE 0,1 :INPUT"スタ-ト オフセット アドレス:&H",DUM$
  45. 450   IF KLEN(DUM$)<>LEN(DUM$) THEN GOTO 430' 2Byt文字除外
  46. 460   IF "I"=LEFT$(DUM$,1) OR "i"=LEFT$(DUM$,1) THEN 
  47. 470    MID$(DUM$,1,1)=CHR$(&H20):GOSUB 1410
  48. 480   ENDIF
  49. 490 '●アドレス数値変換
  50. 500   IF LEN(DUM$)>2 THEN MID$(DUM$,LEN(DUM$)-1,2)="00" ELSE DUM$="" 
  51. 510   SAD&=VAL("&H"+DUM$)
  52. 520 '●ESCコ-ドで色指定
  53. 530   IF RDAT+DUMP=0        THEN DUM$=LEFT$ (MEM$,77)
  54. 540   IF RDAT=-1 AND DUMP=0 THEN DUM$=RIGHT$(MEM$,56)
  55. 550   IF RDAT=0 AND DUMP=-1 THEN DUM$=LEFT$ (MEM$,77):MID$(DUM$,1,2)="  "
  56. 560   IF RDAT+DUMP=-2       THEN DUM$=RIGHT$(MEM$,56):MID$(DUM$,1,2)="  "
  57. 570   LOCATE 0,2 :PRINT CHR$(&H1B)+"[7;32m"+DUM$;
  58. 580   LOCATE 0,19:PRINT DUM$;
  59. 590   LOCATE 0,20:PRINT "  SUM   ";CHR$(&H1B)+"[0;1m"
  60. 600   SORT&=RDAT*-1:Y=57:Y1=72:CLS 5:CLS 1' Y=Gモ-ドY軸の初期値、G画面,T画面の消去
  61. 610   ON DUMP*-1 GOTO 1530' I/O 読出
  62. 620   FOR LOP0=1 TO 16'--------------------LOOP0 16回-------------------
  63. 630 '●4バイト単位で取り込み
  64. 640   FOR LOP1=0 TO 12 STEP 4'-------------LO0P1  4回-------------
  65. 650    DUM&=SAD&+LOP1:DUM&=CALLM (&H0,SRC&,DUM&,4,SORT&)
  66. 660    POKE DAT&+LOP1,DUM&,4
  67. 670   NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)--------- 
  68. 680 '●整列、SUM 計算
  69. 690   FOR LOP1=0 TO 15 '-------------LOOP1 16回-------------------
  70. 700    LDA$=LDA$+" "+RIGHT$("00"+HEX$(PEEK(DAT&+LOP1)),2)
  71. 710    SMY&(LOP1)=SMY&(LOP1)+PEEK(DAT&+LOP1):SMX&=SMX&+PEEK(DAT&+LOP1)
  72. 720   NEXT'--------------------LOOP1 NEXT-------------------------
  73. 730 '●DATA、X軸SUM表示(SYMBOL表示)
  74. 740   LDA$=RIGHT$("00000000"+HEX$(SAD&),8)+LDA$+" :"+RIGHT$("00"+HEX$(SMX&),2)
  75. 750   SYMBOL(0,Y),LDA$,1,1,7:SMX&=0:LDA$="":SAD&=SAD&+16
  76. 760   ON RDAT*-1 GOTO 950:ON K_ON*-1 GOTO 910
  77. 770 '●CHR表示(漢字off)
  78. 780  '       Y座標パラメ-タの書き込み
  79. 790   POKE ((PEEK(VARPTR(GC$),4))+2),Y1,2
  80. 800  '           *文字*
  81. 810   GCPAR$=GC$+DAT$
  82. 820  '       グラフィックBIOSコ-ル
  83. 830      BIOSNO&=&H20
  84. 840      R_EAX&=&H6201:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H0
  85. 850      R_ESI&=PEEK(VARPTR(GCPAR$),4):R_EDI&=&H0
  86. 860      R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
  87. 870  '
  88. 880      CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
  89. 890      GOTO 950
  90. 900 '●CHR表示(漢字on PRINT表示)
  91. 910   FOR LOP1=0 TO 15
  92. 920    ON (PEEK(DAT&+LOP1)<&H20)*-1 GOSUB 1260
  93. 930   NEXT 
  94. 940   LOCATE 61,Y/19:PRINT DAT$;
  95. 950   Y=Y+19:Y1=Y1+19:NEXT'-----------LOOP0 NEXT(256byt 一画面分)--------
  96. 960 '●Y軸SUM表示(SYMBOL表示)
  97. 970   DUM$="":ON RDAT*-1 GOTO 2170' RDAT=-1なら、Y軸SUMを表示しない
  98. 980   FOR LOP0=0 TO 15'--------------LOOP0 16回------------------
  99. 990    DUM$=DUM$+RIGHT$("00"+HEX$(SMY&(LOP0)),2)+" "
  100. 1000    SMY&=SMY&+SMY&(LOP0):SMY&(LOP0)=0
  101. 1010   NEXT'---------------LOOP0 NEXT(Y軸SUM 計算)----------------
  102. 1020   SYMBOL(72,380),DUM$+":"+RIGHT$("00"+HEX$(SMY&),2),1,1,7:SMY&=0
  103. 1030 '●キ-入力選択
  104. 1040 KY$=INKEY$:PF%=INP(&H600)
  105. 1050 IF PF%=&H5B GOTO 1240                                 '終了
  106. 1060 IF KY$=""   GOTO 1040                                 '無入力
  107. 1070 IF KY$=CHR$(&H09) THEN ON DUMP*-1+1 GOSUB 1410,1370   'CTRL+I
  108. 1080 IF KY$=CHR$(&H0B) THEN ON K_ON*-1+1 GOSUB 1450,1490   'CTRL+K
  109. 1090 IF KY$=CHR$(&H13) AND DUMP=0 GOSUB 2430               'CTRL+S
  110. 1100 IF KY$=CHR$(&H1E) GOSUB 1280                          '↑
  111. 1110 IF KY$=CHR$(&H2D) OR KY$=CHR$(&H16) GOSUB 1280        '-、前行
  112. 1120 IF KY$=CHR$(&H02) GOSUB 1300                          'CTRL+B
  113. 1130 IF KY$=CHR$(&H0E) GOSUB 1320                          'CTRL+N
  114. 1140 IF KY$=CHR$(&H1F) OR KY$=CHR$(&H0D) GOTO 600          '↓、RETURN
  115. 1150 IF KY$=CHR$(&H2B) OR KY$=CHR$(&H17) GOTO 600          '+、次行  
  116. 1160 IF KY$=CHR$(&H12) GOTO 2150                           'CTRL+R
  117. 1170 IF KY$=CHR$(&H08) GOTO 2540                           'CTRL+H
  118. 1180 IF KY$=CHR$(&H01) GOTO  430                           'CTRL+A
  119. 1190 IF KY$="M" OR KY$="m" GOTO  3220                      ' M
  120. 1200 IF KY$="C" OR KY$="c" GOTO  3380                      ' C
  121. 1210 IF KY$="X" OR KY$="x" GOTO  3610                      ' X
  122. 1220 GOTO 1040
  123. 1230 '● プログラム終了処理
  124. 1240   CLS:WIDTH 80:CONSOLE 0,25,0:END
  125. 1250 '● "."に置き換える
  126. 1260   POKE DAT&+LOP1,&H2E:RETURN
  127. 1270 '● 前画面
  128. 1280   SAD&=SAD&-512:GOSUB 1340:KY$=CHR$(&H1F):RETURN
  129. 1290 '● 半、前画面
  130. 1300   SAD&=SAD&-384:GOSUB 1340:KY$=CHR$(&H1F):RETURN
  131. 1310 '● 半、次画面
  132. 1320   SAD&=SAD&-128:KY$=CHR$(&H1F):RETURN 
  133. 1330 '● ゼロチェック
  134. 1340   IF SAD&<0 THEN SAD&=0
  135. 1350   RETURN
  136. 1360 '● メモリ-ダンプ モ-ド
  137. 1370   DUMP=0 :RDAT=0:K_ON=-1:GOSUB 1390:GOSUB 1470:KY$=CHR$(&H01):RETURN 
  138. 1380 '● メモリ-ダンプ モ-ド表示
  139. 1390   LOCATE 60,1:PRINT "メモリ-":RETURN
  140. 1400 '● I/Oポ-トダンプ モ-ド
  141. 1410   DUMP=-1:RDAT=0:K_ON=-1:GOSUB 1430:GOSUB 1470:KY$=CHR$(&H01):RETURN 
  142. 1420 '● I/Oポ-トダンプ モ-ド表示
  143. 1430   LOCATE 60,1:PRINT "I/O  ":RETURN
  144. 1440 '● 漢字 ON  モ-ド  
  145. 1450   K_ON=-1:SAD&=SAD&-256:GOSUB 1470:KY$=CHR$(&H1F):RETURN
  146. 1460 '● 漢字 ON  モ-ド表示  
  147. 1470   LOCATE 69,1:PRINT "       ":RETURN
  148. 1480 '● 漢字 OFF モ-ド
  149. 1490   K_ON=0 :SAD&=SAD&-256:GOSUB 1510:KY$=CHR$(&H1F):RETURN
  150. 1500 '● 漢字 OFF モ-ド表示
  151. 1510   LOCATE 69,1:PRINT "/OFF":RETURN
  152. 1520 '● I/Oアドレス チェック
  153. 1530   IF SAD&<&H3000 THEN SAD&=&H3000' I/Oアドレス最小値
  154. 1540   IF SAD&>&H3F00 THEN SAD&=&H3F00' I/Oアドレス最大値
  155. 1550   IF (SAD&>&H2F00) AND (SAD&<&H4000) THEN CMOS=-1
  156. 1560 '● I/Oポ-トを読む
  157. 1570   FOR LOP0=1 TO 16'--------------------LOOP0 16回-------------------
  158. 1580 '●4バイト単位で取り込み
  159. 1590   ON RDAT*-1 GOTO 2020 '並び替え取り込み
  160. 1600   ON CMOS*-1 GOTO 2200 'RDAT=0(通常でのCMOS用整列、SUM 計算) 
  161. 1610   FOR LOP1=0 TO 12 STEP 4'-------------LOOP1  4回-------------
  162. 1620    DUM&=SAD&+LOP1:DUM&=INP(DUM&,4):POKE DAT&+LOP1,DUM&,4
  163. 1630   NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)--------- 
  164. 1640 '●整列、SUM 計算
  165. 1650   FOR LOP1=0 TO 15 '-------------LOOP1 16回-------------------
  166. 1660    LDA$=LDA$+" "+RIGHT$("00"+HEX$(PEEK(DAT&+LOP1)),2)
  167. 1670    SMY&(LOP1)=SMY&(LOP1)+PEEK(DAT&+LOP1):SMX&=SMX&+PEEK(DAT&+LOP1)
  168. 1680   NEXT'--------------------LOOP1 NEXT-------------------------
  169. 1690 '●DATA、X軸SUM表示(SYMBOL表示)
  170. 1700   LDA$=RIGHT$("00000000"+HEX$(SAD&),8)+LDA$+" :"+RIGHT$("00"+HEX$(SMX&),2)
  171. 1710   SYMBOL(0,Y),LDA$,1,1,7:SMX&=0:LDA$="":SAD&=SAD&+16
  172. 1720   ON RDAT*-1 GOTO 1910:ON K_ON*-1 GOTO 1860
  173. 1730 '●CHR表示(漢字off)
  174. 1740  '       Y座標パラメ-タの書き込み
  175. 1750   POKE ((PEEK(VARPTR(GC$),4))+2),Y1,2
  176. 1760  '           *文字*
  177. 1770   GCPAR$=GC$+DAT$
  178. 1780  '       グラフィックBIOSコ-ル
  179. 1790      BIOSNO&=&H20
  180. 1800      R_EAX&=&H6201:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H0
  181. 1810      R_ESI&=PEEK(VARPTR(GCPAR$),4):R_EDI&=&H0
  182. 1820      R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
  183. 1830  '
  184. 1840      CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
  185. 1850      GOTO 1910
  186. 1860 '●CHR表示(漢字on PRINT表示)
  187. 1870   FOR LOP1=0 TO 15
  188. 1880    ON (PEEK(DAT&+LOP1)<&H20)*-1 GOSUB 1260
  189. 1890   NEXT 
  190. 1900   LOCATE 61,Y/19:PRINT DAT$;
  191. 1910   Y=Y+19:Y1=Y1+19:NEXT'-----------LOOP0 NEXT(256byt 一画面分)--------
  192. 1920 '●Y軸SUM表示(SYMBOL表示)
  193. 1930   DUM$="":ON RDAT*-1 GOTO 2170' RDAT=-1なら、Y軸SUMを表示しない
  194. 1940   ON CMOS*-1 GOTO 2310
  195. 1950   FOR LOP0=0 TO 15'--------------LOOP0 16回------------------
  196. 1960    DUM$=DUM$+RIGHT$("00"+HEX$(SMY&(LOP0)),2)+" "
  197. 1970    SMY&=SMY&+SMY&(LOP0):SMY&(LOP0)=0
  198. 1980   NEXT'---------------LOOP0 NEXT(Y軸SUM 計算)----------------
  199. 1990   SYMBOL(72,380),DUM$+":"+RIGHT$("00"+HEX$(SMY&),2),1,1,7:SMY&=0
  200. 2000   GOTO 1030
  201. 2010 '● 並び替え取り込み(DUMP=-1,RDAT=-1の時)
  202. 2020   DUM$="":NUB=0
  203. 2030   FOR LOP1=0 TO 12 STEP 4'-------------LO0P1  4回-------------
  204. 2040    DUM&=SAD&+LOP1:DUM&=INP(DUM&,4)
  205. 2050    DUM$=DUM$+RIGHT$("00000000"+HEX$(DUM&),8)
  206. 2060   NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)--------- 
  207. 2070   ON CMOS*-1 GOTO 2370 'RDAT=0(並び替えでのCMOS用整列、SUM 計算) 
  208. 2080   FOR LOP1=1 TO 32 STEP 2'-------------LO0P1 16回-------------
  209. 2090    LDA$=LDA$+" "+MID$(DUM$,LOP1,2)
  210. 2100    SMY&(NUB)=SMY&(NUB)+VAL("&H"+MID$(DUM$,LOP1,2)):NUB=NUB+1
  211. 2110    SMX&=SMX&+VAL("&H"+MID$(DUM$,LOP1,2))
  212. 2120   NEXT'---------------LOOP1 NEXT(16byt 整列,SUM 計算)--------- 
  213. 2130   GOTO 1700
  214. 2140 '● リアルデ-タモ-ド
  215. 2150   RDAT=NOT(RDAT):SAD&=SAD&-256:GOTO 530
  216. 2160 '● Y軸SUM初期化(RDAT=-1の時)
  217. 2170   SYMBOL(72,380),SPACE$(69),1,1,7
  218. 2180   FOR LOP0=0 TO 15:SMY&(LOP0)=0:NEXT:GOTO 1040
  219. 2190 '● CMOS=-1 通常取り込み
  220. 2200   FOR LOP1=0 TO 12 STEP 4'-------------LOOP1  4回-------------
  221. 2210    DUM&=SAD&+LOP1:DUM&=INP(DUM&,4):POKE DAT&+LOP1,DUM&,4
  222. 2220    POKE DAT&+LOP1+1,&H2E:POKE DAT&+LOP1+3,&H2E
  223. 2230   NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)--------- 
  224. 2240 '● CMOS=-1 通常整列,SUM 計算
  225. 2250   FOR LOP1=0 TO 15 STEP 2'--------------- LOOP1 8回-----------
  226. 2260    LDA$=LDA$+" "+RIGHT$("00"+HEX$(PEEK(DAT&+LOP1)),2)+" .."
  227. 2270    SMY&(LOP1)=SMY&(LOP1)+PEEK(DAT&+LOP1):SMX&=SMX&+PEEK(DAT&+LOP1)
  228. 2280   NEXT'----------------LOOP1 NEXT----------------------------- 
  229. 2290   GOTO 1700
  230. 2300 '● CMOS=-1 通常YSUM 計算
  231. 2310   FOR LOP0=0 TO 14 STEP 2'--------------LOOP0 8回------------
  232. 2320    DUM$=DUM$+RIGHT$("00"+HEX$(SMY&(LOP0)),2)+" .. "
  233. 2330    SMY&=SMY&+SMY&(LOP0):SMY&(LOP0)=0:SMY&(LOP0+1)=0
  234. 2340   NEXT'---------------LOOP0 NEXT(Y軸SUM 計算)----------------
  235. 2350   GOTO 1990
  236. 2360 '● CMOS=-1 並び替え整列,SUM 計算
  237. 2370   FOR LOP1=3 TO 31 STEP 4'-------------LOOP1 8回-------------
  238. 2380    LDA$=LDA$+" .. "+MID$(DUM$,LOP1,2)
  239. 2390    SMX&=SMX&+VAL("&H"+MID$(DUM$,LOP1,2))
  240. 2400   NEXT'---------------LOOP0 NEXT-----------------------------
  241. 2410   GOTO 2130
  242. 2420 '● セレクタ変更(数値の有効、無効のチェックしていません。)
  243. 2430   CLS 5:CLS 1:LOCATE 10,10:INPUT"セレクタ値:&H",DUM$
  244. 2440   IF KLEN(DUM$)<>LEN(DUM$) THEN GOTO 2430' 2Byt文字除外
  245. 2450   IF VAL("&H"+DUM$)=0 OR VAL("&H"+DUM$)>&HFFFF THEN GOTO 2430' 桁制限
  246. 2460   SRC&=VAL("&H"+DUM$):KY$=CHR$(&H01):RETURN
  247. 2470 '● BIOSコ-ル用、変数定義
  248. 2480   BIOSNO&=&H90:R_EAX&=&H0600:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H0
  249. 2490   R_ESI&=&H0:R_EDI&=&H0:R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
  250. 2500   ' キ-ボ-ドBIOSコ-ル(キ-バッファ クリア)
  251. 2510   CALLM &H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
  252. 2520   RETURN 
  253. 2530 '● キ-機能表示
  254. 2540   CLS 5:CLS 1:LOCATE 0,4
  255. 2550   PRINT "●キ-機能表示 ON:CTRL+H"
  256. 2560   PRINT "●次画面:次行、↓、+、RETURN、CTRL+M"
  257. 2570   PRINT "●前画面:前行、↑、-"
  258. 2580   PRINT "●半、次画面:CTRL+N"
  259. 2590   PRINT "●半、前画面:CTRL+B"
  260. 2600   PRINT "●画面停止:PF1"
  261. 2610   PRINT "●アドレス入力:CTRL+A"
  262. 2620   PRINT "●アドレス記憶 ON: M (NO.1-6 入力)"
  263. 2630   PRINT "●アドレス変換 ON: C (NO.1-6 入力)"
  264. 2640   PRINT "●数値変換 ON:X ,OFF:RETURN" 
  265. 2650   PRINT "●終了:PF12"
  266. 2660   PRINT "●I/Oダンプモ-ド ON, OFF:CTRL+I"
  267. 2670   PRINT "●リアルデ-タモ-ド ON, OFF:CTRL+R"
  268. 2680   PRINT "●漢字 OFF, ON:CTRL+K"
  269. 2690   KY$=INKEY$:ON (KY$="")*-1 GOTO 2690
  270. 2700   SAD&=SAD&-256:GOTO 600
  271. 2710 '● コントロ-ルコ-ド表示(PRINT 表示)
  272. 2720   LOCATE 0,21:PRINT CHR$(&H1B)+"[1;32m"' ESCコ-ドの指定 
  273. 2730    ' キャラクタ-コ-ドの00hより 
  274. 2740   CC=5:CR&=&H8100
  275. 2750    LOCATE CC  ,21:PRINT MKL$(CR&   )+" : "
  276. 2760    LOCATE CC  ,22:PRINT MKL$(CR&+ 1)+": "
  277. 2770    LOCATE CC  ,23:PRINT MKL$(CR&+ 2)+": ";
  278. 2780   CC=12
  279. 2790    LOCATE CC  ,21:PRINT MKL$(CR&+ 3)+": "
  280. 2800    LOCATE CC  ,22:PRINT MKL$(CR&+ 4)+": "
  281. 2810    LOCATE CC  ,23:PRINT MKL$(CR&+ 5)+": ";
  282. 2820   CC=19
  283. 2830    LOCATE CC  ,21:PRINT MKL$(CR&+ 6)+": "
  284. 2840    LOCATE CC+1,22:PRINT "BL "
  285. 2850    LOCATE CC  ,23:PRINT MKL$(CR&+ 8)+": ";
  286. 2860   CC=26
  287. 2870    LOCATE CC  ,21:PRINT MKL$(CR&+ 9)+": "
  288. 2880    LOCATE CC  ,22:PRINT MKL$(CR&+10)+": " 
  289. 2890    LOCATE CC  ,23:PRINT MKL$(CR&+11)+": ";
  290. 2900   CC=33
  291. 2910    LOCATE CC+1,21:PRINT "CL "
  292. 2920    LOCATE CC  ,22:PRINT MKL$(CR&+13)+": "
  293. 2930    LOCATE CC  ,23:PRINT MKL$(CR&+14)+": ";
  294. 2940   CC=40:FOR CR&=&H810F TO &H8114 STEP 3
  295. 2950    LOCATE CC  ,21:PRINT MKL$(CR&   )+": "
  296. 2960    LOCATE CC  ,22:PRINT MKL$(CR&+ 1)+": "
  297. 2970    LOCATE CC  ,23:PRINT MKL$(CR&+ 2)+": ";
  298. 2980   CC=CC+7:NEXT
  299. 2990   CC=54
  300. 3000    LOCATE CC+1,21:PRINT "NK "
  301. 3010    LOCATE CC+1,22:PRINT "SN "
  302. 3020    LOCATE CC  ,23:PRINT MKL$(&H8117)+": ";
  303. 3030   CC=61:FOR CR&=&H8118 TO &H811B STEP 3
  304. 3040    LOCATE CC  ,21:PRINT MKL$(CR&   )+": "
  305. 3050    LOCATE CC  ,22:PRINT MKL$(CR&+ 1)+": "
  306. 3060    LOCATE CC  ,23:PRINT MKL$(CR&+ 2)+": ";
  307. 3070   CC=CC+7:NEXT
  308. 3080   CC=75
  309. 3090    LOCATE CC  ,21:PRINT MKL$(&H811E)+": "
  310. 3100    LOCATE CC  ,22:PRINT MKL$(&H811F)+": "
  311. 3110    ' CHR$No.表示 
  312. 3120   CC=2:FOR LOP0=0 TO &H1C STEP 3 
  313. 3130    LOCATE CC,21:PRINT RIGHT$("00"+HEX$(LOP0  ),2)+"h="
  314. 3140    LOCATE CC,22:PRINT RIGHT$("00"+HEX$(LOP0+1),2)+"h="
  315. 3150    LOCATE CC,23:PRINT RIGHT$("00"+HEX$(LOP0+2),2)+"h=";
  316. 3160   CC=CC+7:NEXT
  317. 3170    LOCATE CC,21:PRINT HEX$(&H1E)+"h="
  318. 3180    LOCATE CC,22:PRINT HEX$(&H1F)+"h=";
  319. 3190   PRINT CHR$(&H1B)+"[0;1m";' ESCコ-ドの指定解除  
  320. 3200   RETURN
  321. 3210 '● アドレス、モ-ドメモ
  322. 3220   LOCATE 61,20:PRINT CHR$(&H1B)+"[1;32m";"アドレス記憶";CHR$(&H1B)+"[0;1m"
  323. 3230   GOSUB 3540' アドレス、モ-ド表示 へ
  324. 3240   KY$=INKEY$:ON (KY$="")*-1 GOTO 3240
  325. 3250    IF KY$<"7" AND KY$>"0" THEN 
  326. 3260     MID$(ADM$,(VAL(KY$)-1)*23+1,20)=RIGHT$("00"+KY$,2)+"."+RIGHT$("0000"+HEX$(SRC&),4)+"."+RIGHT$("00000000"+HEX$(SAD&-256),8)
  327. 3270                     MID$(ADM$,(VAL(KY$)-1)*23+17,2)=".M"
  328. 3280     IF DUMP=-1 THEN MID$(ADM$,(VAL(KY$)-1)*23+17,2)=".I"
  329. 3290                     MID$(ADM$,(VAL(KY$)-1)*23+19,1)="*"
  330. 3300     IF RDAT=-1 THEN MID$(ADM$,(VAL(KY$)-1)*23+19,1)="R"
  331. 3310                     MID$(ADM$,(VAL(KY$)-1)*23+20,1)="*"
  332. 3320     IF KAOF=-1 THEN MID$(ADM$,(VAL(KY$)-1)*23+20,1)="-"
  333. 3330    ELSE 
  334. 3340     LOCATE 61,20:PRINT SPACE$(12):GOSUB 2720:GOTO 1040
  335. 3350    ENDIF
  336. 3360    GOTO 3230
  337. 3370 '● アドレス、モ-ドチェンジ 
  338. 3380   LOCATE 61,20:PRINT CHR$(&H1B)+"[1;32m";"アドレス変換";CHR$(&H1B)+"[0;1m"
  339. 3390   GOSUB 3540' アドレス、モ-ド表示 へ
  340. 3400   KY$=INKEY$:ON (KY$="")*-1 GOTO 3400
  341. 3410    IF KY$<"7" AND KY$>"0" THEN 
  342. 3420     SRC&=VAL("&H"+MID$(ADM$,(VAL(KY$)-1)*23+5,4))
  343. 3430     SAD&=VAL("&H"+MID$(ADM$,(VAL(KY$)-1)*23+10,8))
  344. 3440     IF SRC&=0 THEN SRC&=&H14:GOTO 3400
  345. 3450     IF MID$(ADM$,(VAL(KY$)-1)*23+18,1)="M" THEN DUMP=0 ELSE DUMP=-1
  346. 3460     IF MID$(ADM$,(VAL(KY$)-1)*23+19,1)="*" THEN RDAT=0 ELSE RDAT=-1
  347. 3470     IF MID$(ADM$,(VAL(KY$)-1)*23+20,1)="*" THEN KAOF=0 ELSE KAOF=-1
  348. 3480     LOCATE 61,20:PRINT SPACE$(12)
  349. 3490     GOSUB 2720:ON DUMP*-1+1 GOSUB 1390,1430
  350. 3500                ON KAOF*-1+1 GOSUB 1470,1510:GOTO 530
  351. 3510    ENDIF
  352. 3520   LOCATE 61,20:PRINT SPACE$(12):GOSUB 2720:GOTO 1040
  353. 3530 '● アドレス、モ-ド表示
  354. 3540   LOCATE 0,21:PRINT CHR$(&H1B)+"[1;32m"' ESCコ-ドの指定 
  355. 3550   LOCATE 2,21:PRINT "NO.セレクタ.   アドレス.モ-ド: NO.セレクタ.   アドレス.モ-ド: NO.セレクタ.   アドレス.モ-ド"+SPACE$(9)
  356. 3560   LOCATE 2,22:PRINT LEFT$ (ADM$,66)+SPACE$(10)
  357. 3570   LOCATE 2,23:PRINT RIGHT$(ADM$,66)+SPACE$(4);
  358. 3580   LOCATE 0,21:PRINT CHR$(&H1B)+"[0;1m"' ESCコ-ドの指定解除  
  359. 3590   RETURN
  360. 3600 '● 16進、10進、2進 変換
  361. 3610   ON ERROR GOTO 4650
  362. 3620   LOCATE 0,21:PRINT SPACE$(79);:PRINT SPACE$(79);:PRINT SPACE$(79);
  363. 3630   LOCATE 2,22:INPUT":",DUM$
  364. 3640   IF LEN(DUM$)=0 THEN ON ERROR GOTO 0:GOSUB 2720:GOTO 1040
  365. 3650   ON (KLEN(DUM$)<>LEN(DUM$))*-1     GOTO 3620        ' 2Byt文字除外
  366. 3660   NO=INSTR(1,DUM$,"="):ON (NO=0)*-1 GOTO 3620        ' "=" チェック
  367. 3670 ' 16進-----> ??
  368. 3680   ON (INSTR(1,LEFT$(DUM$,NO),"&h")>0)*-1 GOTO 3760
  369. 3690   ON (INSTR(1,LEFT$(DUM$,NO),"&H")>0)*-1 GOTO 3760
  370. 3700 ' 2進------> ??
  371. 3710   ON (INSTR(1,LEFT$(DUM$,NO),"b")>0)*-1 GOTO 3800
  372. 3720   ON (INSTR(1,LEFT$(DUM$,NO),"B")>0)*-1 GOTO 3800
  373. 3730 ' 10進-----> ??
  374. 3740   GOTO 3860
  375. 3750 ' 16進----->2進
  376. 3760   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"b")>0)*-1 GOTO 3960
  377. 3770   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"B")>0)*-1 GOTO 3960
  378. 3780 ' 16進----->10進
  379. 3790   ON (LEN(DUM$)=NO)*-1 GOTO 3930
  380. 3800 '  2進----->16進
  381. 3810   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&h")>0)*-1 GOTO 4370
  382. 3820   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&H")>0)*-1 GOTO 4370
  383. 3830 '  2進----->10進
  384. 3840   ON (LEN(DUM$)=NO)*-1 GOTO 4370
  385. 3850 ' 10進----->16進
  386. 3860   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&h")>0)*-1 GOTO 4630
  387. 3870   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&H")>0)*-1 GOTO 4630
  388. 3880 ' 10進----->2進
  389. 3890   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"b")>0)*-1  GOTO 4170
  390. 3900   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"B")>0)*-1  GOTO 4170
  391. 3910   GOTO 3620
  392. 3920  ' 16----->10進変換表示
  393. 3930   LOCATE NO+3,22:PRINT VAL(LEFT$(DUM$,NO))
  394. 3940   KY$=INKEY$:ON (KY$="")*-1 GOTO 3940:GOTO 3620
  395. 3950  ' 16----->2進変換表示
  396. 3960   DUM$=DUM$+"it("
  397. 3970   FOR LOP0=3 TO LEN(HEX$(VAL(LEFT$(DUM$,NO-1))))+3
  398. 3980    IF MID$(DUM$,LOP0,1)="0" DUM$=DUM$+"0000" 
  399. 3990    IF MID$(DUM$,LOP0,1)="1" DUM$=DUM$+"0001" 
  400. 4000    IF MID$(DUM$,LOP0,1)="2" DUM$=DUM$+"0010" 
  401. 4010    IF MID$(DUM$,LOP0,1)="3" DUM$=DUM$+"0011" 
  402. 4020    IF MID$(DUM$,LOP0,1)="4" DUM$=DUM$+"0100" 
  403. 4030    IF MID$(DUM$,LOP0,1)="5" DUM$=DUM$+"0101" 
  404. 4040    IF MID$(DUM$,LOP0,1)="6" DUM$=DUM$+"0110" 
  405. 4050    IF MID$(DUM$,LOP0,1)="7" DUM$=DUM$+"0111" 
  406. 4060    IF MID$(DUM$,LOP0,1)="8" DUM$=DUM$+"1000" 
  407. 4070    IF MID$(DUM$,LOP0,1)="9" DUM$=DUM$+"1001" 
  408. 4080    IF MID$(DUM$,LOP0,1)="A" DUM$=DUM$+"1010" 
  409. 4090    IF MID$(DUM$,LOP0,1)="B" DUM$=DUM$+"1011" 
  410. 4100    IF MID$(DUM$,LOP0,1)="C" DUM$=DUM$+"1100" 
  411. 4110    IF MID$(DUM$,LOP0,1)="D" DUM$=DUM$+"1101" 
  412. 4120    IF MID$(DUM$,LOP0,1)="E" DUM$=DUM$+"1110" 
  413. 4130    IF MID$(DUM$,LOP0,1)="F" DUM$=DUM$+"1111" 
  414. 4140   NEXT:DUM$=DUM$+")"
  415. 4150   LOCATE 3,22:PRINT DUM$:GOTO 3940
  416. 4160  ' 10----->2進変換表示
  417. 4170   DUM$=DUM$+"it("
  418. 4180   FOR LOP0=1 TO LEN(HEX$(VAL(LEFT$(DUM$,NO))))+1
  419. 4190    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="0" DUM$=DUM$+"0000" 
  420. 4200    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="1" DUM$=DUM$+"0001" 
  421. 4210    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="2" DUM$=DUM$+"0010" 
  422. 4220    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="3" DUM$=DUM$+"0011" 
  423. 4230    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="4" DUM$=DUM$+"0100" 
  424. 4240    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="5" DUM$=DUM$+"0101" 
  425. 4250    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="6" DUM$=DUM$+"0110" 
  426. 4260    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="7" DUM$=DUM$+"0111" 
  427. 4270    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="8" DUM$=DUM$+"1000" 
  428. 4280    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="9" DUM$=DUM$+"1001" 
  429. 4290    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="A" DUM$=DUM$+"1010" 
  430. 4300    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="B" DUM$=DUM$+"1011" 
  431. 4310    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="C" DUM$=DUM$+"1100" 
  432. 4320    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="D" DUM$=DUM$+"1101" 
  433. 4330    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="E" DUM$=DUM$+"1110" 
  434. 4340    IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="F" DUM$=DUM$+"1111" 
  435. 4350   NEXT:DUM$=DUM$+")"
  436. 4360   LOCATE 3,22:PRINT DUM$:GOTO 3940
  437. 4370  ' 2->16(10)進変換表示             
  438. 4380   NO1=INSTR(1,LEFT$(DUM$,NO-1),"B"):ON (NO1>0)*-1 GOTO 4400
  439. 4390   NO1=INSTR(1,LEFT$(DUM$,NO-1),"b")
  440. 4400   FOR LOP0=2 TO LEN(MID$(DUM$,NO1+1,NO-2)) STEP 4 
  441. 4410    IF MID$(DUM$,LOP0,4)="0000" DUM$=DUM$+"0"
  442. 4420    IF MID$(DUM$,LOP0,4)="0001" DUM$=DUM$+"1"
  443. 4430    IF MID$(DUM$,LOP0,4)="0010" DUM$=DUM$+"2"
  444. 4440    IF MID$(DUM$,LOP0,4)="0011" DUM$=DUM$+"3"
  445. 4450    IF MID$(DUM$,LOP0,4)="0100" DUM$=DUM$+"4"
  446. 4460    IF MID$(DUM$,LOP0,4)="0101" DUM$=DUM$+"5"
  447. 4470    IF MID$(DUM$,LOP0,4)="0110" DUM$=DUM$+"6"
  448. 4480    IF MID$(DUM$,LOP0,4)="0111" DUM$=DUM$+"7"
  449. 4490    IF MID$(DUM$,LOP0,4)="1000" DUM$=DUM$+"8"
  450. 4500    IF MID$(DUM$,LOP0,4)="1001" DUM$=DUM$+"9"
  451. 4510    IF MID$(DUM$,LOP0,4)="1010" DUM$=DUM$+"A"
  452. 4520    IF MID$(DUM$,LOP0,4)="1011" DUM$=DUM$+"B"
  453. 4530    IF MID$(DUM$,LOP0,4)="1100" DUM$=DUM$+"C"
  454. 4540    IF MID$(DUM$,LOP0,4)="1101" DUM$=DUM$+"D"
  455. 4550    IF MID$(DUM$,LOP0,4)="1110" DUM$=DUM$+"E"
  456. 4560    IF MID$(DUM$,LOP0,4)="1111" DUM$=DUM$+"F"
  457. 4570   NEXT
  458. 4580   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&h")>0)*-1 GOTO 4610
  459. 4590   ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&H")>0)*-1 GOTO 4610
  460. 4600   LOCATE NO+3,22:PRINT VAL("&H"+RIGHT$(DUM$,LEN(DUM$)-NO)):GOTO 3940
  461. 4610   LOCATE 3,22   :PRINT DUM$:GOTO 3940
  462. 4620  ' 10----->16進変換表示
  463. 4630   LOCATE NO+5,22:PRINT RIGHT$("00000000"+HEX$(VAL(LEFT$(DUM$,NO))),8):GOTO 3940
  464. 4640  ' 入力値のチェック
  465. 4650  ON (ERR=6)*-1 GOTO 3620:RESUME
  466.